package hxy.bytecode.thread;

import java.util.Random;

public class ThreadPoolTest {
    // 本地变量测试
    int a;
    // ThreadLocal 用法
    ThreadLocal<Integer> threadLocal = ThreadLocal.withInitial(() -> Integer.parseInt("1"));

    public static void main(String[] args) {
        // 获取默认线程池
        ThreadPool threadPool = ThreadPool.getThreadPool();
        ThreadPoolTest threadPoolTest = new ThreadPoolTest();
        for (int i = 0; i < 1000; i++) {
//            只新建了一个ThreadPoolTest对象，所以ThreadPoolTest里面的a是一样的。
            threadPool.execute(threadPoolTest.new TestRunnable(i));
            // 下面是因为创建了 新的ThreadPoolTest对象，所以每个a都不是一样的。
            threadPool.execute(new ThreadPoolTest().new TestRunnable(i));
        }
    }

    class TestRunnable implements Runnable {
        int i;

        public TestRunnable(int i) {
            this.i = i;
        }

        @Override
        public void run() {
            Integer b = threadLocal.get();
            System.out.printf("当前线程 %s\t%s\t a=%s\tb=%s\n", Thread.currentThread().getName(), i, a++, b++);
            try {
                Thread.sleep(new Random().nextInt(10));
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}
